package vip.liux.backend.application.service.coupon;

import vip.liux.application.dots.PagedResultDto;
import vip.liux.contracts.shared.enums.coupon.UsedTag;

import java.util.List;

public interface UserCouponService {

    /**
     * 领取优惠券
     *
     * @param couponNo 优惠券编号
     * @param userId   用户id
     */
    void receiveCoupon(String couponNo, Long userId);

    /**
     * 查询用户优惠券
     *
     * @param userId 用户id
     * @param type   优惠券状态类型
     * @return 用户优惠券数据传输对象
     */
    List<UserCouponDto> query(Long userId, UsedTag type);

    /**
     * 优惠券详情
     *
     * @param id 优惠券id
     * @return 用户优惠券数据传输对象
     */
    UserCouponDto detail(Long id, String code);

    /**
     * 查询可用优惠券
     * 根据用户id查询用户可用的优惠券，并标记是否已领取
     *
     * @param userId 用户id
     * @return 可用优惠券数据传输对象
     */
    List<ShopCouponDto> queryAvailableCoupons(Long userId);

    /**
     * 查询用户优惠券
     *
     * @param input    查询条件
     * @return 用户优惠券数据传输对象
     */
    PagedResultDto<UserCouponDto> receivedList(QueryUserCouponDto input);
}
